package com.ftg.learn.chapter03;

import com.ftg.learn.chapter03.service.UserService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 *
 * java-base 核心目标 ，就是用纯java代替xml ，完全的javabase没有配置文件
 *  1 : 解析类，构建容器过程
 *  ApplicationContext : org.springframework.context
 *    抽象类
 *      AbstractXmlApplicationContext
 *        子类 :
 *        FileSystemXmlApplicationContext :  针对于相对路径 工程路径  file(c://aa.spring)
 *        ClassPathXmlApplicationContext : 针于class路径   target路径 -- src
 *   BeanFactory  : org.springframework.beans.factory
 *     子接口
 *       HierarchicalBeanFactory
 *         子接口
 *           ApplicationContext
 *
 *  2:构造spring容器的方法有几种?
 *    1 : AnnotationConfigApplicationContext
 *    2 : FileSystemXmlApplicationContext
 *    3: ClassPathXmlApplicationContext
 *  AnnotationConfigApplicationContext
 *
 *  通过java代码 完成容器实例化，以及大量的类的注入，去掉xml
 *  register 注册功能 : 用来完成类注册成为组件功能
 * @author kangjx
 * @date  2022/11/3
 */
public class JavaBaseConfig {


    public static void main(String[] args) {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
        applicationContext.scan("com.ftg.learn.chapter03");
        applicationContext.refresh();

        UserService userService = applicationContext.getBean(UserService.class);
        userService.test(applicationContext);

        //容器  注入   查找
//        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ApplicationConfig.class);
//        Product p = applicationContext.getBean(Product.class);
//        System.out.println(p.getAddress());

        //只实例化一个容器，里面不添加任何组件
        //容器 状态 1
//        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
        //容器 状态 1 然后 容器状态  1 容器状态 2
        //纯的javabase
//        applicationContext.register(Product.class);

        //这是扫描方式，表示开启注解模式
//        applicationContext.scan("com.ftg.learn.chapter03.entity");
//
//        applicationContext.refresh();
//        //容器 状态 1
//        Product p = applicationContext.getBean(Product.class);
//        System.out.println(p.getAddress());
    }

}
